﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class datHang : CommonPage
{
    VLGDataContext _db9 = new VLGDataContext();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["KhachHang"] != null)
        {
            Session["currentItem"] = "giohangp";

            if (!IsPostBack)
            {
                var acc = (from a in _db9.VLGAccounts
                           where a.idAcc == Customer.idAcc
                           select a).Single();
                try
                {
                    //nhat.hoangg 27/7/2012 : so tien du bao gom ca so tien kiem dc va so tien paypal  
                    //lblSoTienDu.Text = Customer.soTien.Value.ToString();
                    lblSoTienDu.Text = (acc.soTien + acc.soTienPaypal).ToString();
                }
                catch { }
                // ma hh
                String MaHH = Request.QueryString["id"];
                //String MaHH = MaHHRQ.Substring(MaHHRQ.LastIndexOf('_')+1);
                if (String.IsNullOrEmpty(MaHH))
                {
                    dulieuGH();
                    //nhat.hoang 27/07/2012 : so tien hien tai bao gom ca tien paypal
                    //float sotienhientai = float.Parse(Customer.soTien.Value.ToString());
                    double sotienhientai = (acc.soTien + acc.soTienPaypal).HasValue ? (acc.soTien + acc.soTienPaypal).Value : 0;

                    double tongcong = Cart.Sum(ii => ii.DonGia);
                    // hien nut Thanh Toan , Paypal
                    if (sotienhientai < tongcong)
                    {
                        Label1.Text = "Số tiền dư trong tài khoản không đủ để thực hiện nên phải thanh toán qua PayPal";
                        btn_Paypal.Enabled = true;
                        btnThanhToan.Enabled = false;
                        udPanelGH.Update();
                    }
                    else
                    {
                        btnThanhToan.Enabled = true;
                    }
                }
                else
                {

                    Gig hh4 = _db9.Gigs.Single(h => h.idGig == int.Parse(MaHH)); //&& h.AnHien == true);
                    if (hh4.idAcc == Customer.idAcc)
                    {
                        MessageBox("Bạn không thể tự đặt mua sản phẩm của mình");
                        dulieuGH();
                        return;

                    }
                    else
                    {
                        if (Cart.Count() < 1)
                        {
                            try
                            {
                                // tìm trong giỏ, nếu có rồi thì chỉ tăng số lượng lên 1
                                CartItem item = Cart.Single(i => i.MaHH == int.Parse(MaHH));
                                dulieuGH();
                                MessageBox("Dịch vụ đã có trong giỏ hàng");
                                return;
                            }
                            catch // không tìm thấy trong giỏ -> lấy mặt hàng đã chọn từ CSDL đưa vào giỏ
                            {
                                try
                                {
                                    // lấy hàng trong CSDL
                                    Gig hh = _db9.Gigs.Single(h => h.idGig == int.Parse(MaHH));
                                    // tạo mới mặt hàng để bỏ vào giỏ
                                    // Response.Write(hh.TenCongViec+"_"+hh.idGig);

                                    CartItem item = new CartItem
                                    {
                                        MaHH = hh.idGig,
                                        TenHH = hh.TenCongViec,
                                        DonGia = (double)hh.GiaTien,
                                        MaLoai = (int)hh.idCategory
                                    };
                                    // bỏ vào giỏ hàng
                                    Cart.Add(item);
                                    dulieuGH();
                                    //nhat.hoang 27/07/2012 : so tien trong tk bao gom ca tien paypal tra lai
                                    double sotienhientai = (acc.soTien + acc.soTienPaypal).HasValue ? (acc.soTien + acc.soTienPaypal).Value : 0;
                                    double tongcong = Cart.Sum(ii => ii.DonGia);
                                    // hien nut Thanh Toan , Paypal
                                    if (sotienhientai < tongcong)
                                    {
                                        //MessageBox("Số tiền dư trong tài khoản không đủ để thực hiện");
                                        //Label1.Text = "Số tiền dư trong tài khoản không đủ để thực hiện nên phải xài PayPal";
                                        btn_Paypal.Enabled = true;
                                        btnThanhToan.Enabled = false;
                                        udPanelGH.Update();
                                    }
                                    else
                                    {
                                        btnThanhToan.Enabled = true;
                                    }

                                }
                                catch (Exception pp)
                                {
                                    Response.Redirect(ResolveClientUrl("~/details.aspx"));
                                }
                            }
                        }
                        else
                        {
                            MessageBox("Mỗi lần bạn chỉ có thể đặt mua 1 sản phẩm hoặc dịch vụ !");
                            dulieuGH();
                        }
                    }
                }
            }
            else
                URLHelper.BuildURL("Gio-hang");
        }
        else
        {
            Response.Redirect(ResolveClientUrl("accessDenied.aspx"));
        }
    }

    void dulieuGH()
    {
        GridView1.DataSource = Cart;
        GridView1.DataBind();
        lblTongCong.Text = Cart.Sum(i => i.DonGia).ToString();
        //

    }

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        // xóa mặt hàng khỏi giỏ hàng tương ứng với vị trí chọn Delete của GridView
        Cart.RemoveAt(e.RowIndex);
        // hiển thị lại giỏ hàng
        this.dulieuGH();
        udPanelGH.Update();
        Response.Redirect(URLHelper.BuildURL("Gio-hang"));
    }
    //protected void btnMuaTiep_Click(object sender, EventArgs e)
    //{
    //    Response.Redirect(ResolveClientUrl("details.aspx"));
    //}
    protected void btnThanhToan_Click(object sender, EventArgs e)
    {
        string maDV = "";
        try
        {
            Label lblID = (Label)GridView1.Rows[0].FindControl("LabelID");
            maDV = lblID.Text;

            // Tao chuoi kick hoat gom 15 chu so
            string chuoiActive = AllCode.Utils.Mahoa(AllCode.Utils.TaoChuoiNgauNhien(15));
            // tao ID Don Hang : VLG-NgayThangNam
            string ngaythang = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Ticks.ToString().Substring(0, 11);
            string idDonHang = "VLG" + ngaythang;
            // Lấy thong tin người bán tại đây ------------------
            Gig gpp = _db9.Gigs.Single(ll => ll.idGig == int.Parse(maDV));
            string emailNguoiBan = gpp.VLGAccount.Email;
            string idnguoiBan = gpp.VLGAccount.idAcc.ToString();

            double gia = Cart.Sum(ii => ii.DonGia);
            //Label1.Text = maDV;
            //Label1.Text += "<br/>" + chuoiActive;
            //Label1.Text += "<br/>" + idDonHang;
            //Label1.Text += "<br/>" + Customer.idAcc + "_" + Customer.Email + "<br/>" + emailNguoiBan+"<br/>"+idnguoiBan;

            try
            {
                // Trừ tiền trong tài khoản người mua
                int type = 1;
                VLGAccount accTrutien = _db9.VLGAccounts.Single(plo => plo.idAcc == Customer.idAcc);
                //kiểm tra so tien neu so tien paypal > giá thì dùng so tien paypal thanh toán, sử dụng cho trường hợp thanh toán = pp nhưng khi hủy thì trả về soTienPP
                if (accTrutien.soTienPaypal >= gia)
                {
                    type = 2;
                    accTrutien.soTienPaypal = accTrutien.soTienPaypal - gia;
                }
                else
                {
                    type = 1;
                    accTrutien.soTien = accTrutien.soTien - gia;
                }
                //float tienhtai = (float)accTrutien.soTien.Value;
                //float sotienconlaisaukhitru = tienhtai - gia;
                //accTrutien.soTien = sotienconlaisaukhitru;
                _db9.SubmitChanges();

                Order oder = new Order()
                {
                    idDH = idDonHang,
                    idGig = int.Parse(maDV),
                    idAcc = Customer.idAcc,
                    GiaTien = gia,
                    NgayDat = DateTime.Now,
                    Status = 0, // chua kick hoat
                    ChuoiKichHoat = chuoiActive,
                    DaGuiMail = 0,
                    Type = type,//thanh toan so du
                    SellerActive = false,
                    CustomerActive = false,
                    SellerConfirm = false,
                    CustomerConfirm = false,
                    DaThanhToan = false,
                    CustomerReject = false,
                    SellerReconfirm = false,
                    rate=false
                };
                _db9.Orders.InsertOnSubmit(oder);
                _db9.SubmitChanges();

                // Lấy đơn hàng ra cập nhật lại
                Order ord = _db9.Orders.Single(lpm => lpm.idDH == idDonHang);

                // Lưu thông tin vào bảng Yêu cầu chuyen khoản
                YeuCauChuyenKhoan ycck = new YeuCauChuyenKhoan()
                {
                    ngay = DateTime.Now,
                    soTien = gia,
                    status = true,
                    type = (int)EnumChuyenKhoanType.MuaTK,
                    idDH = idDonHang,
                    idAcc = Customer.idAcc
                };
                _db9.YeuCauChuyenKhoans.InsertOnSubmit(ycck);
                _db9.SubmitChanges();
                // Xây dựng cho Email 
                int index = Request.Url.AbsoluteUri.IndexOf("datHang.aspx");
                String UserActivateUrlBuyer = Request.Url.AbsoluteUri.Substring(0, index) + "submitOrder.aspx?icc=" + Customer.idAcc + "&code=" + chuoiActive + "&order=" + idDonHang;
                String UserActivateUrlSeller = Request.Url.AbsoluteUri.Substring(0, index) + "submitOrder.aspx?icc=" + idnguoiBan + "&code=" + chuoiActive + "&order=" + idDonHang;
                String urlweb = "<a href=\"http://www.vieclamgap.net\"></a>";
                String subject = "Xác nhận Đơn hàng trên Việc Làm Gấp !";
                MessageBox(UserActivateUrlSeller + "___" + UserActivateUrlBuyer);
                try
                {
                    // Gửi cho Người MUA

                    String emailNguoiMua = Customer.Email;
                    String body = String.Format(@"<p style='font-size:14px;'>Chào bạn, bạn hay ai đó đã tạo tài khoản trên trang {0}.
                                                            Vui lòng click vào link bên dưới để xác nhận bạn là người đã đặt đơn hàng này.<br/><br/>
                                                            <a href='{1}'>Click vào đây để xác nhận !!! </a><br/><br/> 
                                                            hoặc copy và paste link này vào trình duyệt : {2}
                                                            <p style='font-size:14px'>Nếu bạn không kích hoạt trong vòng <b>2 ngày</b> kể từ ngày Email này được gửi đi - {3} - thì bạn phải kích hoạt lại.<br/><br/> Cảm ơn !", urlweb, UserActivateUrlBuyer, UserActivateUrlBuyer, DateTime.Now);
                    GoogleMailer.Send(emailNguoiMua, subject, body);
                    ord.DaGuiMail = 1;
                    MessageBox("Đã gửi Email kích hoạt cho bạn");
                }
                catch (Exception ccac)
                {
                    //Response.Write("Loi them Orderr" + ccac.Message);
                    MessageBox("Email kích hoạt chưa được gửi đi. Vui lòng liên hệ bộ phận Support");
                }
                try
                {
                    // Gửi cho Người BÁN
                    String body2 = String.Format(@"<p style='font-size:14px;'>Chào bạn , có người đặt mua Dịch vụ của bạn trên {0}.
                                                            Vui lòng click vào link bên dưới để xác nhận bạn ĐỒNG Ý nhận đơn đặt hàng này.<br/><br/>
                                                            <a href='{1}'>Click vào đây để xác nhận !!! </a><br/><br/> 
                                                            hoặc copy và paste link này vào trình duyệt : <a>{2}</a>
                                                            <p style='font-size:14px'>Nếu bạn không kích hoạt trong vòng <b>2 ngày</b> kể từ ngày Email này được gửi đi - <b>{3}</b> - thì bạn phải kích hoạt lại.<br/><br/> Cảm ơn !", urlweb, UserActivateUrlSeller, UserActivateUrlSeller, DateTime.Now);
                    GoogleMailer.Send(emailNguoiBan, subject, body2);
                    ord.DaGuiMail = 2;
                    MessageBox("Đã gửi email kích hoạt cho người bán");
                }
                catch
                {
                    MessageBox("Email kích hoạt chưa được gửi đi. Vui lòng liên hệ bộ phận Support");
                }
                finally
                {
                    _db9.SubmitChanges();
                    Cart.Clear();
                    dulieuGH();
                    udPanelGH.Update();
                }
            }
            catch (Exception capp)
            {
                //Response.Write(capp.Message);
                //MessageBox("Không thể đặt hàng vào lúc này ! Vui lòng thử lại vào thời gian khác ! Cảm ơn");
            }

        }
        catch
        {
            return;
        }
    }
    protected void btn_Paypal_Click(object sender, EventArgs e)
    {
        try
        {
            Label lblID = (Label)GridView1.Rows[0].FindControl("LabelID");
            string maDV = lblID.Text;
            int indexP = Request.Url.AbsoluteUri.IndexOf("datHang.aspx");
            Gig gpp2 = _db9.Gigs.Single(ll => ll.idGig == int.Parse(maDV));
            float gia2 = float.Parse(Cart.Sum(ii => ii.DonGia).ToString());
            PaypalProcess _paypalProcess = new PaypalProcess();
            string returnURL = Request.Url.AbsoluteUri.Substring(0, indexP) + "paySuccess.aspx?acCode=" + Customer.idAcc;
            string returnCancelURL = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;
            string server = "https://www.sandbox.paypal.com/cgi-bin/webscr?";
            string business = ConfigurationManager.AppSettings["admEmail"].ToString();//"nhathn_1342581970_biz@gmail.com";
            string itemName = gpp2.TenCongViec_KD;
            int itemNumber = gpp2.idGig;
            float amount = gia2;
            Response.Redirect(_paypalProcess.GetPaypalProcess(returnURL, returnCancelURL, server, business, itemName, itemNumber, amount));
        }
        catch
        {
            MessageBox("Chưa có sản phẩm nào trong Giỏ Hàng");
        }
    }
}
